//测试使用mongoose操作连接mongodb

const md5 = require('blueimp-md5');

/*1.连接数据库*/
// 1.1引入mongoose
const mongoose = require('mongoose');
// 1.2 连接指定数据库
mongoose.connect('mongodb://localhost:27017/react-demo',{useNewUrlParser:true,useUnifiedTopology: true}, function(err){
  if(err){
    console.log('Connection Error:' + err)
  }else{
    console.log('Connection success!')
  }
});

mongoose.set('useFindAndModify', false);

// 1.3 获取连接对象
const conn = mongoose.connection;
// 1.4 绑定连接完成的监听
conn.on('connected',function () {
  console.log('数据库连接成功')
});

/*2. 得到对应特定集合的Model*/
// 2.1 字义Schema
const userSchema = mongoose.Schema({
  username:{type:String,required:true},
  password:{type:String,required:true},
  type:{type:String,required:true}
});

// 2.2 定义Model{与集合对应，可以操作集合}
const UserModel = mongoose.model('user',userSchema);

/*3.通过Model或其实例对集合数据进行CRUD操作*/
// 3.1 通过Model实例的save()添加数据
function testSave() {
  // 创建UserModel实例
  const userModel = new UserModel({username:'Tom',password: md5('123'),type:'da'});
  // 调用save()保存
  userModel.save(function (error,user) {
    console.log('save()',error,user)
  });
}
//testSave();

// 3.2 通过Model的find()/findOne()查询多个或一个数据
function testFind() {
  UserModel.find(function (error,users) {
    console.log('find()',error,users)
  })
}

// testFind();

// 3.3 通过Model的findByIdAndUpdate()更新某个数据
function testUpdate() {
  UserModel.findByIdAndUpdate({_id:'5f2a27864fd01b4dd84abc73'},
      {username:'TOM'}, function (error,oldUser) {
    console.log('update()',error,oldUser)
  })
}

//testUpdate();

// 3.4 通过Model的remove()删除匹配的数据
function testDelete() {
  UserModel.remove({},function (error,doc) {
    console.log('remove()',error,doc)
  })
}
//testDelete();
//testFind();

const {ChatModel} = require('../db/models');

function testDelete1() {
  ChatModel.remove({},function (error,doc) {
    console.log('remove()',error,doc)
  })
}
function testFind1() {
  UserModel.find(function (error,users) {
    console.log('find()',error,users)
  })
}
//testDelete1();
testFind1();